package chapter2;

/**
 * 全一问题
 */
public class AllOnesGA {

    public static void main(String[] args) {
        // 创建遗传算法对象
        GeneticAlgorithm ga = new GeneticAlgorithm(100, 0.001, 0.95, 2);

        // 初始化种群
        Population population = ga.initPopulation(50);

        // 计算适应度 种群适应度和个体适应度
        ga.evalPopulation(population);

        // 初始代数
        int generation = 1;

        /**
         * 开始进化循环
         *
         * 每个遗传算法问题都有不同的完成标准
         * 对全1问题，标准为一条染色体所有基因都是1
         *
         */
        while (ga.isTerminationConditionMet(population) == false) {
            // 打印适应度最高的个体
            System.out.println("第" + generation + "代的最优解为: " + population.getFittest(0).toString());

            // 交叉
            population = ga.crossoverPopulation(population);

            // 变异
            population = ga.mutatePopulation(population);

            // 计算种群适应度
            ga.evalPopulation(population);

            // 代数+1
            generation++;
        }

        /**
         * 跳出循环，打印最优解
         */
        System.out.println("发现最优解在第 " + generation + " 代");
        System.out.println("这个最优解为: " + population.getFittest(0).toString());
    }
}
